package control;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import model.bean.Aluno;
import model.bean.Curriculo;
import model.bean.CursoExterno;
import model.bean.Experiencia;
import model.bo.AlunoBO;
import model.bo.CurriculoBO;
import apresentacao.GerentePagina;
import apresentacao.GerenteValidacao;
import enumerador.Estado;
import enumerador.EstadoCivil;
import enumerador.ModosVisao;
import enumerador.NivelEscolaridade;
import enumerador.RegimeTrabalhista;
import enumerador.SituacaoEscolar;

public class CurriculoMB extends GerentePagina implements Serializable {

	private static final long serialVersionUID = -520022923045463102L;
	
	private Curriculo curriculo = new Curriculo();
	private CursoExterno cursoExterno = new CursoExterno();
	private Experiencia experiencia = new Experiencia();
	private CurriculoBO curriculoBO = new CurriculoBO();
	private Aluno aluno = new Aluno();
	private AlunoBO alunoBO = new AlunoBO();
	
	public CurriculoMB() {
		
		aluno = alunoBO.consultar(aluno);
		
		curriculo.setIdAluno(aluno.getId());
		curriculo.setNome(aluno.getNome());
		curriculo.setBairro(aluno.getBairro());
		curriculo.setCep(aluno.getCidade());
		curriculo.setCidade(aluno.getCidade());
		curriculo.setCpf(aluno.getCpf());
		curriculo.setEmail(aluno.getEmail());
		curriculo.setEndereco(aluno.getEndereco());
		curriculo.setEstado(aluno.getEstado());
		curriculo.setTelefoneResidencial(aluno.getTelefoneResidencial());
		curriculo.setTelefoneCelular(aluno.getTelefoneResidencial());
		
	}

	public String inclusao() {
		setVisao(ModosVisao.INCLUSAO);
		return "curriculo";
	}

	public void incluir() {
		try {
			curriculo.setCursosExternos(getListaCursoExternos());
			curriculo = curriculoBO.incluir(curriculo);
		} catch (Exception e) {
			e.printStackTrace();
			GerenteValidacao.mensagemErroIncluir();
		}
		setVisao(ModosVisao.INCLUIR);
		GerenteValidacao.mensagemIncluir();
	}

	public void edicao() {
		try {
			curriculo = curriculoBO.consultar(curriculo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		setVisao(ModosVisao.EDICAO);
	}


	public void salvar() {
		try {
			curriculo.setCursosExternos(getListaCursoExternos());
			curriculoBO.salvar(curriculo);
		} catch (Exception e) {
			e.printStackTrace();
			GerenteValidacao.mensagemErroAlterar();
		}
		setVisao(ModosVisao.SALVAR);
		GerenteValidacao.mensagemAlterar();
	}

	
	public void excluir() {
		try {
			curriculoBO.excluir(curriculo);
		} catch (Exception e) {
			e.printStackTrace();
			GerenteValidacao.mensagemErroExcluir();
		}
		setVisao(ModosVisao.INCLUSAO);
		curriculo = new Curriculo();
		GerenteValidacao.mensagemExcluir();	
	}

	//Curso Externo
	public void adicionarCursoExterno() {
		try{
			adicionarListaCursoExterno(cursoExterno);
			GerenteValidacao.mensagemIncluir();
			cursoExterno = new CursoExterno();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public List<CursoExterno> adicionarListaCursoExterno(CursoExterno cursoExterno){
			getListaCursoExternos().add(cursoExterno);
			cursoExterno.setCurriculo(curriculo);
			return getListaCursoExternos();
	}
	
	public List<CursoExterno> removerCursoExterno() {
		getListaCursoExternos().remove(cursoExterno);
		GerenteValidacao.mensagemExcluir();
		cursoExterno = new CursoExterno();
		return getListaCursoExternos();
	}
	
	public List<CursoExterno> getListaCursoExternos(){
		if (getCurriculo().getCursosExternos() == null) {
			getCurriculo().setCursosExternos(new ArrayList<CursoExterno>()); 
			}
		return getCurriculo().getCursosExternos();
	}
		
	//Experiencia
	public void adicionarExperiencia() {
		try{
			adicionarListaExperiencia(experiencia);
			GerenteValidacao.mensagemIncluir();
			experiencia = new Experiencia();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public List<Experiencia> adicionarListaExperiencia(Experiencia experiencia){
		getListaExperiencias().add(experiencia);
		experiencia.setCurriculo(curriculo);
		return getListaExperiencias();
	}
	
	public List<Experiencia> removerExperiencia() {
		getListaExperiencias().remove(experiencia);
		GerenteValidacao.mensagemExcluir();
		experiencia = new Experiencia();
		return getListaExperiencias();
	}
	
	public List<Experiencia> getListaExperiencias(){
		if (getCurriculo().getExperiencias() == null) {
			getCurriculo().setExperiencias(new ArrayList<Experiencia>()); 
			}
		return getCurriculo().getExperiencias();
	}
	
		// Gets e Sets

	public Curriculo getCurriculo() {
		return curriculo;
	}

	public CursoExterno getCursoExterno() {
		return cursoExterno;
	}

	public void setCursoExterno(CursoExterno cursoExterno) {
		this.cursoExterno = cursoExterno;
	}

	public Experiencia getExperiencia() {
		return experiencia;
	}

	public void setExperiencia(Experiencia experiencia) {
		this.experiencia = experiencia;
	}

	public void setCurriculo(Curriculo curriculo) {
		this.curriculo = curriculo;
	}

		public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public AlunoBO getAlunoBO() {
		return alunoBO;
	}

	public void setAlunoBO(AlunoBO alunoBO) {
		this.alunoBO = alunoBO;
	}


	//List
	public List<SelectItem> getEstados() {
		List<SelectItem> resultado = Estado.getListSelectItem();
		return resultado;
	}

	public List<SelectItem> getEstadosCivis() {
		List<SelectItem> resultado = EstadoCivil.getListSelectItem();
		return resultado;
	}

	public List<SelectItem> getSituacao() {
		List<SelectItem> resultado = SituacaoEscolar.getListSelectItem();
        return resultado;
	}

	public List<SelectItem> getNivelEscolaridade() {
        List<SelectItem> resultado = NivelEscolaridade.getListSelectItem();
        return resultado;
    }
	
	public List<SelectItem> getTiposRegimesTrabalhistas() {
		List<SelectItem> resultado = RegimeTrabalhista.getListSelectItem();
        return resultado;
	}
}
